#ifndef PROJECT3_H
#define PROJECT3_H
#include <list>
// for convince
typedef unsigned int uint;
typedef unsigned short uint_16;

// A struct to contain the package data results from popcon voting
struct Package
{
    char PackageName[58];
    uint Value;
    uint Weight; 
    void WriteToConsole();
};

// A list of packages is considered a set
typedef std::list<Package *> SET;
typedef std::list<uint> pset;

// Read the packages from a file
Package * getPackages(char * fileName, int numPackagesToRead);
// Print loaded packages from an array
void displayPackages(Package * packages, int max);
// Determine the optimal subset of packages from all the packages
SET ExhaustiveKnapsack(Package * packages, uint numberOfPackages, uint maximumPackageSize);
// Given a set of packages, determine the total votes of that set
uint total_votes(SET& set);
// Give a set of packages, determine the total size of that set
uint total_size(SET& set);
// Print a set of packages to the console
void PrintSet(SET& set);

pset exhaustiveKnapsack(const Package * packages, int n, int w);
#endif // PROJECT3_H